 #name escape
 #set xscreen = 320
 #set yscreen = 256
 #set xres = 320/4
 #set yres = 256/4

 ;Setup memory bizness
 ;Screen
 mov r0,#2
 swi OS_ReadDynamicArea
 mov r0,#2
 rsbs r1,r1,#xscreen*yscreen*2
 swigt OS_ChangeDynamicArea


 ;Wimpslot
 mov r0,#640*1024
 mvn r1,#0
 swi Wimp_SlotSize
 mvn r0,#0
 mvn r1,#0
 swi Wimp_SlotSize

 ;Screen mode
 swi 256+22
 swi 256+9
 swi OS_RemoveCursors

 ;Find the video memory
 mov r0,#2
 swi OS_ReadDynamicArea
 str r0,video

 ;Switch off screen blanker..
 mov r0,#4
 swi XScreenBlanker_Control
 add r0,r0,r0,lsl #2
 mov r0,r0,lsl #2
 str r0,ScrBlank
 mov r0,#3
 mov r1,#0
 swi XScreenBlanker_Control

 adr r0,del_off
 swi XOS_CLI

 b loader

.ScrBlank
 dcd 0
.del_off
 dcb "Delirium_Disable",0
 align

 ;Loader part....
.loader
 #include "<Oescape$dir>.intro"
.loader_end
.music
 #include "<Oescape$dir>.music"
.music_end
 ;Data calculation
.data
 #include "<Oescape$dir>.data"
.data_end
 ;Interrupt setup code
.int
 #include "<Oescape$dir>.int"
.int_end

 ;clear screen banks
 ldr r0,video
 mov r1,#0
 mov r2,#0
 mov r3,#0
 mov r4,#0
 mov r5,#0
 mov r6,#0
 mov r7,#0
 mov r8,#0
 mov r9,#0
 mov r10,#0
 mov r11,#0
 mov r12,#0
 mov r13,#(xscreen*yscreen*3)/(12*4)
.cls
 stmia r0!,{r1-r12}
 subs r13,r13,#1
 bne cls

 ;Main loop

.loop

 ;escape?
 mov r0,#121
 mov r1,#240
 swi OS_Byte
 cmp r1,#&ff
 beq int_off

 b ray

 ;demo datas
.effect
 dcd tunnel
 ;demo effects
.ray
 #include "<Oescape$dir>.raytrace"
.tunnel
 #include "<Oescape$dir>.tunnel"
.planes
 #include "<Oescape$dir>.planes"
.cube
 #include "<Oescape$dir>.cube"

 ;lookup table adresses...
.radius_circle
 dcd 0
.radius_flower
 dcd 0
.radius_triangle
 dcd 0
.cos
 dcd 0
.div
 dcd 0
.tex
 dcd 0
.bump
 dcd 0
.env
 dcd 0
.free
 dcd 0
 ;
.bss

